The present invention relates to the field of transmitting information between devices. More particularly, the present invention relates to the field of capturing and processing data received by a device.
The IEEE 1394-1995 standard, xe2x80x9c1394-1995 Standard For A High Performance Serial Bus,xe2x80x9d is an international standard for implementing an inexpensive high-speed serial bus architecture which supports both asynchronous and isochronous format data transfers. Isochronous data transfers are real-time transfers which take place such that the time intervals between significant instances have the same duration at both the transmitting and receiving applications. Each packet of data transferred isochrolnously is transferred in its own time period. An example of an ideal application for the transfer of data isochroniously would be from a video recorder to a television set. The video recorder records images and sounds and saves the data in discrete chunks or packets. The video recorder then transfers each packet, representing the image and sound recorded over a limited time period, during that time period, for display by the television set. The IEEE 1394-1995 standard bus architecture provides multiple channels for isochronous data transfer between applications. A six bit channel number is broadcast with the data to ensure reception by the appropriate application. This allows multiple applications to concurrently transmit isochronous data across the bus structure. Asynchronous transfers are traditional data transfer operations which take place as soon as possible and transfer an amount of data from a source to a destination.
The IEEE 1394-1995 standard provides a high-speed serial bus for interconnecting digital devices thereby providing a universal I/O connection. The IEEE 1394-1995 standard defines a digital interface for the applications thereby eliminating the need for an application to convert digital data to analog data before it is transmitted across the bus. Correspondingly, a receiving application will receive digital data from the bus, not analog data, and will therefore not be required to convert analog data to digital data. The cable required by the IEEE 1394-1995 standard is very thin in size compared to other bulkier cables used to connect such devices. Devices can be added and removed from an IEEE 1394-1995 bus while the bus is active. If a device is so added or removed the bus will then automatically reconfigure itself for transmitting data between the then existing nodes. A node is considered a logical entity with a unique address on the bus structure. Each node provides an identification ROM, a standardized set of control registers and its own address space.
The IEEE 1394-1995 cable environment is a network of nodes connected by point-to-point links, including a port on each node""s physical connection and the cable between them. The physical topology for the cable environment of an IEEE 1394-1995 serial bus is a non-cyclic network of multiple ports, with finite branches. The primary restriction on the cable environment is that nodes must be connected together without forming any closed loops.
The IEEE 1394-1995 cables connect ports together on different nodes. Each port includes terminators, transceivers and simple logic. A node can have multiple ports at its physical connection. The cable and ports act as bus repeaters between the nodes to simulate a single logical bus. The cable physical connection at each node includes one or more ports, arbitration logic, a resynchronizer and an encoder. Each of the ports provide the cable media interface into which the cable connector is connected. The arbitration logic provides access to the bus for the node. The resynchronizer takes received data-strobe encoded data bits and generates data bits synchronized to a local clock for use by the applications within the node. The encoder takes either data being transmitted by the node or data received by the resynchronizer, which is addressed to another node, and encodes it in data-strobe format for transmission across the IEEE 1394-1995 serial bus. Using these components. the cable physical connection translates the physical point-to-point topology of the cable environment into a virtual broadcast bus, which is expected by higher layers of the system. This is accomplished by taking all data received on one port of the physical connection, resynchronizing the data to a local clock and repeating the data out of all of the other ports from the physical connection.
When a stream of continuous data. such as a digital video stream from a video camera. is received by a device over the IEEE 1394-1995 serial bus, the data is typically captured by the device and stored within a series of receive buffers. As each receive buffer is filled. the data within the receive buffer is then processed and transferred to a process data buffer within a supply of process buffers. The emptied receive buffer is then added back into the series of receive buffers to be used to receive more data within the stream of continuous data. After being filled with processed data, the process data buffer is provided to an application, such as a video renderer or a digital video CODEC, to be utilized or further processed by the application. Once utilized or processed by the application, the processed data buffer is added back into the supply of process buffers in order to receive additional processed data within the stream of continuous data.
The process buffers are provided by the application in a non-continuous fashion and from a limited supply. Typically, at some point during the reception of a continuous stream of data, the supply of process buffers will not keep up with the number of receive buffers being filled with captured data. When a receive buffer is filled and no process buffer is available, the captured data within the receive buffer cannot be processed and transferred to a process buffer. The stream of continuous data must still be captured and stored within the receive buffers. Accordingly, when no process buffer is available to receive captured and processed data, the data within the filled receive buffer is typically discarded and the receive buffer is added back into the series of receive buffers in order to store currently captured data within the incoming stream of continuous data. This discarded data is then lost and cannot be retrieved, utilized or processed by the receiving application. In some applications this loss of data will cause discontinuity in the use and display of the processed data.
A method of and apparatus for capturing and processing continuous media-based data streams transmitted over an IEEE 1394 serial bus manages the use of both receive buffers and process buffers in order to minimize the amount of captured data that is discarded due to unavailable process buffers. When receiving a stream of continuous data, the data is captured and stored within a current receive buffer. When the current receive buffer is full, the captured data within the receive buffer is then read out, processed and stored within a process buffer, if a process buffer is available on a cached list of process buffers. When full of processed data, the process buffer is then transferred to an application for utilization or further processing of the processed data. If the process buffer is not completely Filled, then the process buffer is added back to the cached list of process buffers. If a receive buffer is filled and no process buffer is available or if there are already filled receive buffers on a cached list of receive buffers, the filled receive buffer is then added to the cached list of receive buffers. When a process buffer is then available, the data within the earliest filled receive buffer on the cached list of receive buffers is processed and transferred to the available process buffer. If the receive buffer is not emptied, the receive buffer is then put back on the cached list of receive buffers. When the cached list of receive buffers includes a predetermined number of buffers, the data within the earliest filled receive buffer on the cached list of receive buffers is discarded, thereby emptying the receive buffer. The emptied receive buffer is then added to the series of available receive buffers to receive the current captured data.
In one aspect of the present invention, a method of processing captured data includes the steps of receiving a receive buffer filled with captured data. adding the receive buffer to a cached list of receive buffers if there are previously filled buffers on the cached list of receive buffers, adding the receive buffer to the cached list of receive buffers if no process buffer is available and processing the captured data within the receive buffer if the process buffer is available and there are no previously filled buffers on the cached list of receive buffers. The method further includes the step of processing data within an earliest filled receive buffer on the cached list of receive buffers if the process buffer is available and there are previously filled buffers on the cached list of receive buffers. The method further includes the step of storing processed data within the process buffer. The method further includes the step of providing a filled process buffer to an application. The method further includes the step of emptying the earliest filled receive buffer on the cached list of receive buffers if the cached list of receive buffers includes a predetermined number of buffers. Preferably, the predetermined number of buffers is equal to one half a number of available receive buffers. The captured data is preferably captured from an IEEE 1394-1995 serial bus. The method further includes the step of adding an available process buffer to a cached list of process buffers if no receive buffers are filled when the available process buffer becomes available.
In another aspect of the present invention, a method of receiving and processing captured data includes the steps of storing captured data within a receive buffer. thereby forming a filled receive buffer, adding the filled receive buffer to a cached list of receive buffers if there are previously filled buffers on the cached list of receive buffers, adding the filled receive buffer to the cached list of receive buffers if no process buffer is available and processing the captured data within the filled receive buffer if the process buffer is available and there are no previously filled buffers on the cached list of receive buffers. The method further includes the step of processing data within an earliest filled receive buffer on the cached list of receive buffers if the process buffer is available and there are previously filled buffers on the cached list of receive buffers. The method further includes the step of storing processed data within the process buffer. The method further includes the step of providing a filled process buffer to an application. The method further includes the step of emptying the earliest filled receive buffer on the cached list of receive buffers if the cached list of receive buffers includes a predetermined number of buffers. Preferably. the captured data is captured from an IEEE 1394 serial bus. The predetermined number of buffers is preferably equal to one half a number of available receive buffers. The method further includes the step to adding an available process buffer to a cached list of process buffers if no receive buffers are filled when the available process buffer becomes available.
In still another aspect of the present invention, an apparatus for receiving, and processing captured data includes a receiving circuit for receiving captured data, a plurality of receive buffers for storing captured data, a plurality of process buffers for storing processed data and providing the processed data to an application, a processing apparatus for processing captured data thereby forming the processed data and storing the processed data within the process buffers and a cached list of receive buffers, wherein a filled receive buffer is added to the cached list of receive buffers if no process buffers are available when the filled receive buffer is filled and further wherein a filled received buffer is added to the cached list of receive buffers if there are previously filled receive buffers on the cached list of receive buffers when the filled receive buffer is filled. Within the apparatus, data within an earliest filled receive buffer on the cached list of receive buffers is processed first and stored within an available process buffer, if there are previously filled buffers on the cached list of receive buffers. An earliest filled receive buffer on the cached list of receive buffers is emptied, if the cached list of receive buffers includes a predetermined number of buffers. The receiving circuit includes an interface circuit configured for coupling to an IEEE 1994 serial bus structure to receive the captured data. The apparatus further includes a cached list of process buffers, wherein an available process buffer is added to the cached list of process buffers if no receive buffers are filled when the available process buffer becomes available.
In another aspect of the present invention, a method of transmitting a continuous stream of data, including a plurality of packets of data, from a transmitting node to a receiving node over an IEEE 1394 serial bus structure, includes the steps oft receiving the packets of data at the receiving node, thereby forming captured data, storing tile captured data within a receive buffer, thereby forming a filled receive buffer, adding the filled receive buffer to a cached list of receive buffers if there are previously filled buffers on the cached list of receive buffers, adding the filled receive buffer to the cached list of receive buffers if no process buffer is available, processing the captured data within the filled receive buffer if the process buffer is available and there are no previously filled buffers on the cached list of receive buffers and emptying an earliest filled buffer on the cached list of receive buffers if the cached list of receive buffers includes a predetermined number to buffers. The method further includes the step of processing data within the earliest filled receive buffer on the cached list of receive buffers if the process buffer is available and there are previously filled buffers on the cached list of receive buffers. The method further includes the step of storing processed data within the process buffer. The method further includes the step of providing a filled process buffer to an application. Preferably, the predetermined number of buffers is equal to one half a number of available receive buffers. The captured data is preferably captured from an IEEE 1394 serial bus. The method further includes the step of adding an available process buffer to a cached list of process buffers if no receive buffers are filled when the available process buffer becomes available.
In another aspect of the present invention, a network of devices includes a transmitting device for transmitting packets of data, a bus structure coupled to the transmitting device. wherein the packets of data are transmitted over the bus structure and a receiving device coupled to the bus structure to receive the packets of data, the receiving device including a receiving circuit for receiving the packets of data, a plurality of receive buffers for storing captured data, a plurality of process buffers for storing processed data and providing the processed data to an application, a processing apparatus for processing captured data thereby forming the processed data and storing the processed data within the processed buffers and a cached list of receive buffers, wherein a filled receive buffer is added to the cached list of receive buffers if no process buffers are available when the filled receive buffer is filled and further wherein a filled receive buffer is added to the cached list of receive buffers if there are previously filled receive buffers on the cached list of receive buffers when the filled receive buffer is filled. Within the network of devices data within an earliest filled receive buffer on the cached list of receive buffers is processed first and stored within an available process buffer, if there are previously filled buffers on the cached list of receive buffers. An earliest filled receive buffer on the cached list of receive buffers is emptied, if the cached list of receive buffers includes a predetermined number of buffers. Preferably, the bus structure is an IEEE 1394 serial bus structure. The network of devices further includes a cached list of process buffers, wherein an available process buffer is added to the cached list of process buffers if no receive buffers are filled when the available process buffer becomes available.